package nespresso.servlets;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.*;

import nespresso.beans.*;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class LoginoubliServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	public HttpSession session;
    /**
     * Default constructor. 
     */
    public LoginoubliServlet() {
       
    
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		 * si l'utilisateur tape l'adresse de la servlet directement dans la barre d'adresse, il est renvoyé 
		 * sur la page d'accueil !
		 */
		response.sendRedirect("nespresso.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Log log = LogFactory.getLog(LoginoubliServlet.class);
		// on ouvre une session pour y mettre nos objets et pour protéger les pages
		session  = request.getSession(true);
		boolean erreur = false;
		// on récupère les valeurs des deux champs du formulaire de la page de login
    	request.setAttribute("LoginMessage", "");
    	String login = request.getParameter("login");
		String email = request.getParameter("email");
		
		Base user = new Base();
		
		if(StringUtils.isEmpty(login) && StringUtils.isEmpty(email)) {
			request.setAttribute("LoginMessage", "Entrez un login ou une adresse e-mail !");
			erreur = true;
		} else {
			if(!StringUtils.isEmpty(login)) { // On envoie le mail en recherchant avec le login
				// on cherche le user dans la base
				if(user.IsPresent("users", "login", login, 0)) {
					user.GetResultat("users", "login", login);
					user.Suivant();
					email = user.GetTexte("email");
				} else {
					request.setAttribute("LoginMessage", "Utilisateur inconnu !");
					erreur = true;
				}	
			}
		
			if(!StringUtils.isEmpty(email)) { // On envoie le mail en recherchant avec l'email
				if(user.IsPresent("users", "email", email, 0)) {
					user.GetResultat("users", "email", email);
					user.Suivant();
					login = user.GetTexte("login");
				} else {
					request.setAttribute("LoginMessage", "Adresse e-mail inconnue !");
					erreur = true;
				}
			}
		}
		
		if(!erreur) { // On envoie le mail
			// Récupération du mot de passe
			user.ExecuteRequete("SELECT AES_DECRYPT(pass,'NESPRESSO') AS motdepasse FROM users WHERE login='" + login + "'");
			String motdepasse = user.GetTexte("motdepasse");
			User UserTo = new User();
			UserTo.setLogin(login);
			UserTo.setPrenom(user.GetTexte("PRENOM"));
			UserTo.setNom(user.GetTexte("NOM"));
			UserTo.setEmail(user.GetTexte("EMAIL"));
			new EnvoiMail(null, UserTo, "PASSWORD"+motdepasse);
			user.Free();	
		} else { //ERREUR !
			user.Free();
			log.error("Erreur lors de l'envoi du mot de passe !!");
			RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher("/nespresso.jsp");
		    reqDispatcher.forward(request,response);
		}
	}	
}
